Index: std/range.d =================================================================== --- std/range.d (revision 1824) +++ std/range.d (working copy) @@ -2564,7 +2564,7 @@ this.pastLast += step; } /// Ditto - @property bool empty() const { return current == pastLast; } + @property bool empty() const { return step > 0 ? current >= pastLast : current <= pastLast; } /// Ditto @property N front() { return current; } /// Ditto @@ -2708,6 +2708,17 @@ copy(iota(0, idx.length), idx); } +unittest +{ + // Issue 4603 + auto a = array(iota(1, 0)); + assert(a.length == 0); + auto b = array(iota(-1, 0)); + assert(b.length == 1); + auto c = array(iota(-1, 0, -1)); + assert(c.length == 0); +} + /** Options for the $(D FrontTransversal) and $(D Transversal) ranges (below).